import {Native} from "./native.js"
import {os} from "./os";

/**
 * 用于录制短语音,通过base64返回录音数据。
 * @static
 * @version 1
 * @author GuoHua Liu
 * @copyright Copyright © 2019 GuoHua Liu. All rights reserved.
 */
class audioRecorder {
    /**
     * 在录音之前，需要先请求授权
     * @requires {Promise} 错误码:
     * - -1 环境不支持
     * - 其他 未知错误
     */
    static requestAuthorization() {
        return new Promise((resolve,reject)=>{
            if (Native.getInstance().isHos()) {
                Native.getInstance().callNative("ar", {method:"requestAuthorization"}, true, resolve, reject);
            } else {
                reject({errMsg:"当前环境不支持", errCode: -1})
            }
        })
    }

    /**
     * 支持浏览器:否，被reject<br>
     * 开始录音
     * @returns {Promise}
     * 成功回调(刚好和https://ai.qq.com/doc/aaiasr.shtml中描述的请求参数一致)：{speech:string,rate: number,format: number}；
     * 失败回调：{errCode,errMsg}
     * 错误码列表：
     * - -1 环境不支持
     * - 其他 未知错误
     */
    static start() {
        return new Promise((resolve,reject)=>{
            if (os.isHos()) {
                Native.getInstance().callNative("ar", {method: "start"}, true, resolve, reject);
            } else {
                reject({errMsg:"当前环境不支持", errCode: -1})
            }
        })
    }

    /**
     * 支持浏览器:否，被reject<br>
     * 停止录音,结果是通过start注册的成功回调返回的
     */
    static stop() {
        return new Promise((resolve,reject)=>{
            if (os.isHos()) {
                Native.getInstance().callNative("ar", {method: "stop"}, false, resolve, reject);
            } else {
                reject({errMsg: "当前环境不支持", errCode: -1})
            }
        })
    }

    /**
     * 支持浏览器:否，被reject<br>
     * 播放上一次的录音
     * @returns {Promise} 错误码列表：
     * - -1 环境不支持
     * - 其他 未知错误
     */
    static play() {
        return new Promise((resolve,reject)=>{
            if (os.isHos()) {
                Native.getInstance().callNative("ar", {method: "play"}, true, resolve, reject);
            } else {
                reject({errMsg:"当前环境不支持", errCode: -1})
            }
        })
    }

}

export {audioRecorder}

